﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Cargos;
using UricaoWeb.Datos.Excepciones.Cargos;
using System.Data;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;

namespace UricaoWeb.Presentacion
{
    public partial class API_cargo_Consultar : API_Seguridad_Principal
    {
        #region Parametros

        //son los parametros que se utilizan en la clase para las comparaciones.
        public static int _fkHotel = 1;
        private static readonly string _mensajeExcepcionNullObject = "Error al tratar de acceder a un objeto vacio";
        private static readonly string _codigoErrorExcepcion = "1111";
        private readonly string _mensajeError = "No se pudo realizar su solicitud. Intente más tarde.";
        private readonly string _mensajeSinCargos = "No hay cargos en la base de datos. Intente luego."; 
        #endregion

        #region Metodos

        /// <summary>
        ///Constructor por defecto de la clase. Este inicializa con la carga de los datos en el gridview
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        { 
            if (Session["user"] != null)
            {
                 Logica_Usuario usuario = (Logica_Usuario)Session["user"];
                _fkHotel = Convert.ToInt32(usuario.FkHotel);

                    var master = Master as MasterPage;
                    if (master != null)
                      master.actualizar_label();
                
                    base.validar_usuario();

                    if (!IsPostBack)
                        cargarTabla();
                    else
                        GridView_ConsultarCargo.Visible = true;
               }
                else
                    Server.Transfer("API_Seguridad_Login_.aspx", false);
        }

        /// <summary>
        ///Metodo utilizado para controlar la propiedad de la paginacion en el gridview
        /// </summary>
        protected void GVConsultar_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView_ConsultarCargo.PageIndex = e.NewPageIndex;
           // cargarTabla();
        }

        /// <summary>
        ///Metodo que segun el radiobutton seleccionado se encargue de llenar los tablas con los datos 
        ///correspondientes
        /// </summary>
        protected void RadioButtonCargos_CheckedChanged1(object sender, EventArgs e)
        {
            if (rbCargosGeneral.Checked)
            {
                cargarTabla();
            }

            if (RadioButton1.Checked)
            {
                cargarTablaEstado(true);
            }
            if (rbCargosInactivos.Checked)
            {
                cargarTablaEstado(false);
            }
        }

        /// <summary>
        ///Metodo se encarga de cargar los datos en el gridview de forma generica
        /// </summary>
        public void cargarTabla()
        {
                String _status = null;

                DataTable _miTabla = new DataTable();
                Cargo[] _listaCargos = new Cargo().ConsultarCargosGeneral();

                _miTabla.Columns.Add("Nombre ", typeof(string));
                _miTabla.Columns.Add("Estado", typeof(string));

                if (_listaCargos != null)
                {
                    if (_listaCargos.Length > 0)
                    {
                        foreach (Cargo cargo in _listaCargos)
                        {
                            if (cargo._activo == true)
                            {
                                _status = "Activo";
                            }
                            else
                            {
                                _status = "Inactivo";
                            }

                            _miTabla.Rows.Add(cargo._nombre, _status);
                        }
                        GridView_ConsultarCargo.DataSource = _miTabla;
                        GridView_ConsultarCargo.DataBind();
                    }
                    else
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "alert" + UniqueID, "alert('" + _mensajeSinCargos + "');", true);
                }
                else
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert" + UniqueID, "alert('" + _mensajeError + "');", true);
            }


        /// <summary>
        ///Metodo se encarga de cargar los datos en el gridview segun el estatus seleccionado
        /// </summary>
        /// <param name="tipo">sera el tipo de cargos que estoy buscando true=Activos/false=inactivos</param>
        public void cargarTablaEstado(bool tipo)
        {
            try
            {
                String _status = null;

                DataTable _miTabla = new DataTable();
                Cargo[] _listaCargos = new Cargo().ConsultarCargosPorEstado(tipo);


                _miTabla.Columns.Add("Nombre ", typeof(string));
                _miTabla.Columns.Add("Estado", typeof(string));

                foreach (Cargo cargo in _listaCargos)
                {
                    if (cargo._activo == true)
                    {
                        _status = "Activo";
                    }
                    else
                    {
                        _status = "Inactivo";
                    }

                    _miTabla.Rows.Add(cargo._nombre, _status);
                }
                GridView_ConsultarCargo.DataSource = _miTabla;
                GridView_ConsultarCargo.DataBind();
            }
            catch (NullReferenceException e)
            {
                throw new CargoBDExcepcion(_codigoErrorExcepcion, _mensajeExcepcionNullObject, e);
            }

        }
        #endregion
    }
}